<?php

namespace Maestros\Controller\Service;

use Zend\Db\Adapter\Adapter;
use Componentes\Controller\UtilsArrayController;
use Maestros\Model\Entity\Malla;
use Maestros\Controller\Service\GenericService;
use Maestros\Model\Dao\MallaDao;
use Maestros\Controller\Service\EspecialidadService;
use Transaccion\Controller\Service\IngresoMallaService;

class MallaService extends GenericService {
    /* /**
     * @var Zend\Db\Adapter\Adapter 
     */

    private $dbAdapter;
    private static $mallaService;

    /**
     * @param \Zend\Db\Adapter\Adapter $dbAdapter
     */
    private function __construct(Adapter $dbAdapter) {
        $this->dbAdapter = $dbAdapter;
    }

    public static function getInstance($adapter) {
        if (self::$mallaService == null) {
            self::$mallaService = new MallaService($adapter);
        }
        return self::$mallaService;
    }

    public function getMallaDao() {
        return MallaDao::getInstance($this->dbAdapter);
    }

    public function getRegistro($id) {
        $data = null;
        $success = false;
        $malla = $this->obtenerMallaSegunId($id);
        if ($malla->getId() != null) {
            $data[0] = $malla->objectToArray();
            $success = true;
            $mensaje = 'Malla Encontrada';
        }
        $output = array(
            'success' => $success,
            'data' => $data,
            'total' => count($data)
        );
        return $output;
    }

    public function getRegistroCompleto($id) {
        $malla = $this->obtenerMallaSegunId($id);
        return $this->armarRegistroCompleto($malla);
    }

    public function armarRegistroCompleto($malla) {
        $mensaje = 'Malla no encontrado';
        $data = null;
        $success = false;
        $servicioEspecialidad = EspecialidadService::getInstance($this->dbAdapter);
        $especialidad = $servicioEspecialidad->obtenerEspecialidadSegunId($malla->getEspecialidad());
        if ($malla->getId() != null) {
            $data[0] = $malla->objectToArray();
            $success = true;
            $data[0]['_especialidad'] = $especialidad->getNombre();
            $mensaje = 'Materia ENCONTRADA';
        }
        $output = array(
            'success' => $success,
            'data' => $data,
            'total' => count($data),
            'mensaje' => $mensaje
        );
        return $output;
    }

    public function getMallasSegunCedulaYLapsoDeControlInscripcion($cedula, $lapso) {
        $registros = $this->getMallaDao()->getMallasSegunCedulaYLapsoDeControlInscripcion($cedula, $lapso);
        $data = UtilsArrayController::llenarData($registros);
        for ($i = 0; $i < count($data); $i++) {
            $malla = $this->obtenerMallasSegunCedulaYLapsoDeControlInscripcion($data, $i);
            $data[$i] = $malla->objectToArray();
        }
        return UtilsArrayController::organizarOutput(true, $data, null);
    }

//------Retornan los objetos-------

    /**
     * Retorna un registro completo dado un id de malla de la tabla malla
     * @param $id type string
     * @return Objeto malla
     */
    public function obtenerMallaSegunId($id) {
        $registros = $this->getMallaDao()->getMallaSegunid($id);
        $data = UtilsArrayController::llenarData($registros);
        $malla = new Malla($data[0]);
        $malla->setId($data[0]['id']);
        $malla->setEspecialidad($data[0]['id_especialidad']);
        $malla->setFechaCreacion($data[0]['fecha_creacion']);
        $malla->setEstatus($data[0]['id_estatus']);
        $malla->setTipoUniversidad($data[0]['id_tipo_universidad']);
        $malla->setNivelMalla($data[0]['id_nivel_malla']);
        return $malla;
    }

    public function obtenerMallasSegunCedulaYLapsoDeControlInscripcion($data, $i) {
        $malla = new Malla($data[$i]);
        $malla->setId($data[$i]['id']);
        $servicioEspecialidad = EspecialidadService::getInstance($this->dbAdapter);
        $especialidad = $servicioEspecialidad->obtenerEspecialidadSegunId($data[$i]['id_especialidad']);
        $malla->setEspecialidad($especialidad->getNombre());
        $malla->setFechaCreacion($data[$i]['fecha_creacion']);
        $malla->setEstatus($data[$i]['id_estatus']);
        $malla->setTipoUniversidad($data[$i]['id_tipo_universidad']);
        $malla->setNivelMalla($data[$i]['id_nivel_malla']);
        return $malla;
    }

    //echo $data[$i]['id_especialidad'];
//        $servicioEspecialidad = EspecialidadService::getInstance($this->dbAdapter);
//        $especialidad = $servicioEspecialidad->obtenerEspecialidadSegunId($data[$i]['id_especialidad']);
//        $malla->setEspecialidad($especialidad->getNombre());
}
